const http = require("http");
const url = require("url");
const fs = require("fs");
const querystring = require("querystring");

http.createServer((req,res)=>{
    console.log(req.url);
    if(req.url.indexOf('apiData')>=0){
        ajaxHandle(req,res)
    }else{
        fileHandle("../www" + url.parse(req.url).pathname,res)
    }
    

}).listen("3000",()=>{
    console.log("服务已启动，在http://127.0.0.1:3000")
});

function ajaxHandle(req, res){
    // 地址上的数据，直接解析，同步
    const urlObj = url.parse(req.url, true);

    // 非地址上的数据，通过事件接收，异步
    let str = "";
    req.on("data",d=>{
        str += d;
    })
    req.on("end",()=>{
        let reqObj = null;
        if(str === ""){
            reqObj = urlObj.query;
        }else{
            reqObj = qs.parse(str);
        }

        // console.log(urlObj,reqObj);

        switch(urlObj.pathname){
            case '/apiData/detail.json':
                getDetail(reqObj, res);
            break;
            case '/apiData/cateList.json':
            case '/apiData/newsFirst.json':
            case '/apiData/cartlist.json':
                fileHandle('.'+urlObj.pathname, res);
            break;
            case '/apiData/login':
                if(reqObj.type === "login"){
                    // 登录功能
                    login(reqObj, res)
                }else{
                    // 注册功能
                    register(reqObj, res)
                }
            break;
        }
    })
}
function getDetail(reqData,res){
    fs.readFile("./apiData/detail.json","utf-8",(err, data)=>{
        if(err){
            res.write("404");
        }else{
            let resData = JSON.parse(data).find(item=>item.goodId==reqData.goodId)
            res.write(JSON.stringify(resData));
        }
        res.end()
    })
}

function fileHandle(pathname, res){
    fs.readFile(pathname,(err, data)=>{
        if(err){
            res.write("404");
        }else{
            res.write(data);
        }
        res.end();
    })
}
let userMsg = [];
function register(data, res){
    // 利用some方法判断用户数据中是否已经存在当前注册的用户名
    let onoff = userMsg.some(val=>{
        return val.user === data.un
    })
    
    if(onoff){
        // 如果存在，用户名重复
        res.write(JSON.stringify({code:0,title:"用户名重复"}))
    }else{
        userMsg.push({
            userid:"userid_"+Math.random().toString().slice(2),
            user:data.un,
            pass:data.pw,
            flag:0
        })
        // 不存在，注册成功
        res.write(JSON.stringify({code:1,title:"注册成功"}))
    }
    // console.log(userMsg);
    res.end();
}

function login(data, res){
    // 此案判断用户数据中是否具有传入的用户名
    console.log(data);
    let i = 0;
    let onoff = userMsg.some((val, idx)=>{
        i = idx;
        return val.user === data.un;
    })
    if(onoff){
        // 如果有，判断当前数据是否和传入的密码相等
        if(userMsg[i].pass === data.pw){
            // 相等，登录成功
            res.write(JSON.stringify({code:1,title:"登录成功",data:userMsg[i]}))
            // 修改当前数据的状态
            userMsg[i].flag = 1;
        }else{
            // 不相等，密码错误
            res.write(JSON.stringify({code:2,title:"密码错误"}))
        }
    }else{
        // 没有用户名，未注册
        res.write(JSON.stringify({code:0,title:"用户名不存在"}))
    }
    res.end();
}